'''
	集合
'''


# 1. 定义
# ----------------------------------------
# 	由一堆 不会重复的数据 组成的无序序列
# 	其实, 就是没有键的字典
# 	
# 	值: 
# 		无序
# 		具有唯一性
# 		不可变类型
# 	
# 	作用: 
# 		去重
# 		关系测试



# 2. 格式
# ----------------------------------------
# 	集合名 = {值1, 值2, 值3, ... }

a = {} 	 	# 空字典, 而非空集合
print(a, type(a))

a = set() 	# 空集合
print(a, type(a))

a = {'杜子腾', '毕云涛', '史珍香'}
print(a)


# 3. 去重
# ----------------------------------------
a = {10, 20, 30, 40, 20, 50, 20, 60}
print(a)

a = [10, 20, 30, 40, 20, 50, 20, 60]
a = set(a)
a = list(a)
print(a)


# 4. 关系测试
# ----------------------------------------
#  	所有关系, 配合"关系图"来理解

a = {'1','2','3','4','5'}
b = {'4','5','6','7'}

# 交集 &
print( a & b )

# 并集 |
print( a | b )

# 差集 - 
print( a - b ) 	# a 相对于 b的差集
print( b - a ) # b 相对于 a的差集

# 对称差集 ^
print( a ^ b ) 



# 5. 集合操作
# ----------------------------------------
# 	5.1 添加
# 	5.2 删除
# 	5.3 访问, 修改


# 5.1 添加
# 	集合名.add(值)
# 	集合名.update(值)

a = {'杜子腾', '毕云涛', '史珍香'}

a.add('郝爽')
print( a )


# a.update('卜耀') 			# 不适合直接填入 字符串值, 原因: 拆分字符串值, 分别填入
# a.update( ['卜耀'] ) 	# 适合使用容器添加
# a.update( ['卜耀', '项耀'] )
a.update( ('卜耀', '项耀') )
print(a)


# 利用 函数特性来实现的相关效果
a = set()
a.update('123456789')

print(a)

a = set('abcdefg')
print(a)
print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')


# 5.2 删除
# ----------------------------------------
# 	集合名.remove(值) 		值不存在则会报错
#   集合名.discard(值) 		值不存在不会报错


a = {'杜子腾', '毕云涛', '史珍香'}
a.remove('史珍香')
print(a)

a.discard('杜子腾')
print(a)


a = {'杜子腾', '毕云涛', '史珍香'}
# a.remove('郝爽')
a.discard('郝爽')

# 5.3 访问, 修改
# ----------------------------------------
# 	没有索引,没有键, 无法单独获取集合值, 删除一个值

a = {'杜子腾', '毕云涛', '史珍香'}
# print( a[0] )








